﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;


namespace GloberoSport.Negocio
{
    [Serializable]
    public class Track
    {
        #region CAMPOS
        private int _id;
        private decimal _distancia;
        private decimal _altMax;
        private decimal _altTotal;
        private decimal _velMedia;
        private decimal _velMax;
        private DateTime _fechaIni;
        private int _tsTotal;
        private List<TrackPoint> _lista;
        private string _autor;
        #endregion

        #region PROPIEDADES
        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }
        public decimal Distancia
        {
            get { return _distancia; }
            set { _distancia = value; }
        }
        public decimal AltMax
        {
            get { return _altMax; }
            set { _altMax = value; }
        }
        public decimal AltTotal
        {
            get { return _altTotal; }
            set { _altTotal = value; }
        }
        public decimal VelMedia
        {
            get { return _velMedia; }
            set { _velMedia = value; }
        }
        public decimal VelMax
        {
            get { return _velMax; }
            set { _velMax = value; }
        }
        public DateTime FechaIni
        {
            get { return _fechaIni; }
            set { _fechaIni = value; }
        }
        public int TsTotal
        {
            get { return _tsTotal; }
            set { _tsTotal = value; }
        }
        public List<TrackPoint> Lista
        {
            get { return _lista; }
            set { _lista = value; }
        }
        public string Autor
        {
            get { return _autor; }
            set { _autor = value; }
        }
        #endregion

        #region CONSTRUCTORES
        public Track()
        {
            _id = -1;
        }
        public Track(DataRow dr)
        {
            _id = Utilidades.obtenerDatoInt(dr, "Id");
            _distancia = Utilidades.obtenerDatoDecimal(dr, "DIST");
            _altMax = Utilidades.obtenerDatoDecimal(dr, "AMAX");
            _altTotal = Utilidades.obtenerDatoDecimal(dr, "ATOT");
            _velMedia = Utilidades.obtenerDatoDecimal(dr, "VMED");
            _velMax = Utilidades.obtenerDatoDecimal(dr, "VMAX");
            _fechaIni = Utilidades.obtenerDatoDateTime(dr, "FINI");
            _tsTotal = Utilidades.obtenerDatoInt(dr, "TTOT");
            _lista = TrackPoint.obtenerTrackPoints(_id);
        }
        #endregion

        #region METODOS DE CLASE
        public int guardar()
        {
            int iRet = -1;
            if (Id == -1)
            {
                iRet = Datos.Track.insertar(_distancia, _altMax, _altTotal, _velMedia, _velMax, _fechaIni, _tsTotal, "", _autor);
            }
            else
            {
                iRet =  Datos.Track.modificar(_id, _distancia, _altMax, _altTotal, _velMedia, _velMax, _fechaIni, _tsTotal);
            }
            return iRet;
        }
        #endregion

        #region METODOS ESTÁTICOS DE CLASE
        public static List<Track> obtenerTracks(string sUsuario)
        {
            List<Track> lista = new List<Track>();
            DataTable dt = Datos.Track.buscar(sUsuario);
            foreach (DataRow dr in dt.Rows)
            {
                try
                {
                    lista.Add(new Track(dr));
                }
                catch (Exception ex)
                {
                }
            }
            return lista;
        }
        public static List<Track> obtenerTrackUltimo(string sUsuario)
        {
            List<Track> lista = new List<Track>();
            DataTable dt = Datos.Track.buscarUltima(sUsuario);
            foreach (DataRow dr in dt.Rows)
            {
                try
                {
                    lista.Add(new Track(dr));
                }
                catch (Exception ex)
                {
                }
            }
            return lista;
        }
        #endregion
    }
}
